package demo3;

import demo1.Rent;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

//自动生成代理类
public class ProxyInvocationHandler implements InvocationHandler {


//
//    public static Object newProxyInstance(ClassLoader loader,
//                                          Class<?>[] interfaces,
//                                          InvocationHandler h)
//    throws IllegalArgumentException
//  被代理的接口
    private Object target;

    public void setRent(Object target) {
        this.target = target;
    }


    //    生成得到代理类
    public Object getProxy(){
        return Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(),this);
    }
//    处理代理实例，并返回结果
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//        动态代理的本质，就是使用反射机制实现
        haveLunch();
        Object result = method.invoke(target, args);
        climb();
//        获取了执行了什么方法的名字
        fly(method.getName());
        return result;
    }
    public void haveLunch(){
        System.out.println("中介带你吃饭");

    }

    public void climb(){
        System.out.println("中介带你去爬山");
    }

    public void fly(String msg){
        System.out.println("飞来了什么信息"+msg);
    }
}
